package com.lagou.com.lagou.homework.Modules4.item4;

/**
 * 4. 编程题
 *
 * 使用基于 tcp 协议的编程模型实现将 UserMessage 类型对象由客户端发送给服务器； 服务器接收到对象后判断用户对象信息是否为 "admin" 和 "123456"，
 * 若是则 将 UserMessage 对象中的类型改为"success"，否则将类型改为"fail"并回发给客户端，客户端接收到服务器发来的对象后判断并给出登录成功或者失败的提示。
 *
 * 其中 UserMessage 类的特征有：类型(字符串类型) 和 用户对象(User 类型)。
 * 其中 User 类的特征有：用户名、密码(字符串类型)。
 */

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.zip.InflaterInputStream;

public class Server {

    public static void main(String[] args) {
        ServerSocket ss = null;
        Socket s = null;
        ObjectInputStream ois = null;
        //BufferedReader br = null;
        ObjectOutputStream oos = null;

        //创建服务器
        try {
            ss = new ServerSocket(8888);
            s = new Socket();

            System.out.println("等待客户端连接请求...");
            s = ss.accept();
            System.out.println("客户端连接成功");
            //br = new BufferedReader(new InputStreamReader(s.getInputStream()));
            ois = new ObjectInputStream(s.getInputStream());
            //强制转换类型
            UserMessage obj = (UserMessage) ois.readObject();
            //String s1 = br.readLine();
            System.out.println("客户端发来的的对象：" + obj);

            Object pass = new UserMessage("pass", new User("admin", "123456"));
            //System.out.println(obj.equals(pass) ? "pass" : "fail");
            if (obj.equals(pass)){
                obj.setCheck("success");
                oos = new ObjectOutputStream(s.getOutputStream());
                oos.writeObject(obj);
                //System.out.println(obj);
            }else {
                obj.setCheck("fail");
                oos = new ObjectOutputStream(s.getOutputStream());
                oos.writeObject(obj);
            }

        } catch (IOException | ClassNotFoundException e) {
            e.printStackTrace();
        } finally {
            if (null != ss) {
                try {
                    ss.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (null != oos) {
                try {
                    oos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }

            if (null != ois) {
                try {
                    ois.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

    }
}
